on:
  - pull_request
  - push

name: ci-mysql

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  tests:
    name: PHP ${{ matrix.php }}-mysql-${{ matrix.mysql }}
    env:
      extensions: curl, intl, pdo, pdo_mysql
      XDEBUG_MODE: coverage, develop

    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        os:
          - ubuntu-latest

        php:
          - 7.4
          - 8.0
          - 8.1
          - 8.2
          - 8.3

        mysql:
          - 5.7
          - latest

    services:
      mysql:
        image: mysql:${{ matrix.mysql }}
        env:
          MYSQL_ROOT_PASSWORD: root
          MYSQL_DATABASE: yiitest
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

    steps:
      - name: Checkout.
        uses: actions/checkout@v4

      - name: Install PHP with extensions.
        uses: shivammathur/setup-php@v2
        with:
          coverage: xdebug
          extensions: ${{ env.EXTENSIONS }}
          ini-values: date.timezone='UTC'
          php-version: ${{ matrix.php }}
          tools: composer:v2, pecl

      - name: Install dependencies with composer.
        run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi

      - name: Run MySQL tests with PHPUnit and generate coverage.
        if: matrix.php == '7.4'
        run: vendor/bin/phpunit --group mysql --coverage-clover=coverage.xml --colors=always

      - name: Run MySQL tests with PHPUnit.
        if: matrix.php > '7.4'
        run: vendor/bin/phpunit --group mysql --colors=always

      - name: Upload coverage to Codecov.
        if: matrix.php == '7.4'
        uses: codecov/codecov-action@v3
        with:
          file: ./coverage.xml
